// #ifdef H5
import wxSDK from 'jweixin-module'
import Vue from 'vue'
import {wxSign} from '@/api/common/index.js'
import {getAddress} from '@/script/location.js'
import {replaceWxUrl} from '@/script/wx-premission.js'
import { noIcon } from '@/script/attention.js'
			
// 需要调用的微信api列表
export const WXAPI = [
  'updateAppMessageShareData',
  'updateTimelineShareData',
  'onMenuShareAppMessage',
  'scanQRCode', 
  'getLocation',
	'downloadImage',
	'chooseWXPay',
	'openLocation'
]
// 微信分享朋友默认配置
const shareOptionsDefalut = {
  title: '这是标题', // 分享标题
  desc: '这是描述', // 分享描述
  imgUrl: '图片地址', // 封面图
}

export default { 
  /**
   * 判断是否在微信中
   */
  isWechat() {
		let ua = window.navigator.userAgent.toLowerCase();
		if (ua.match(/micromessenger/i) == 'micromessenger') {
			return true;
		} else {
			return false;
		}
  },
  /**
   * 通过config接口注入权限验证配置
   * @param {Object} cb 需要执行的函数
   */
  getWxConfig(path) {
		return new Promise((resolve, reject) => {
			const systemInfo = uni.getSystemInfoSync();
			const isIOS = systemInfo.platform === 'ios';
			let url = isIOS ? location.href : replaceWxUrl(location.href)
			// 调用分享接口
			wxSign({url}).then(res => {
				let {appId, noncestr, signature, timestamp} = res.data
				wxSDK.config({
					debug: false, // 是否开启调试模式
					appId: appId, // 必填，公众号的唯一标识
					timestamp: timestamp, // 必填，生成签名的时间戳
					nonceStr: noncestr, // 必填，生成签名的随机串
					signature: signature, // 必填，签名
					jsApiList: WXAPI
				})
				res.data.testUrl = url
				resolve(res.data)
			}).catch(err => {
				reject(err)
			})
		})
  },

  /**
   * 唤起微信分享
   * @param {Object} sharedata 分享需要的参数
   * @param {Object} cb 成功回调
   * @param {Object} errorCb 失败回调
   */
  callWexinShare(sharedata = shareOptionsDefalut, cb = ()=>{}, errorCb = ()=>{}) {
		this.getWxConfig().then(boo => {
			wxSDK.ready(()=>{
				// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
				wxSDK.updateAppMessageShareData({
					title: 'sharedata.title || shareOptionsDefalut.title',
					desc: 'sharedata.desc || shareOptionsDefalut.desc',
					// 微信对分享图有限制，具体看踩坑
					// imgUrl: (sharedata.imgUrl || shareOptionsDefalut.imgUrl) + '?x-oss-process=image/resize,w_120,m_lfit/format,png/quality,q_80',
					link: window.location.href,
					success:(res)=>{
						cb(res)
					},
					cancel:(cancelMsg)=>{
						errorCb(cancelMsg)
					}
				})
			});
			wxSDK.error((res)=>{				
				console.log('---注入失败，查看失败原因---',res)
			});
		})
  },
	/**
	 * 唤起地理位置
	 * @param {Object} cb 成功回调
	 * @param {Object} errorCb 失败回调
	 */
	callLocation(cb = ()=>{}, errorCb = ()=>{}, marker) {
		this.getWxConfig().then(boo => {
			wxSDK.ready(()=>{
				wxSDK.getLocation({
					type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
					isHighAccuracy: true,
					success: function (res) {
						var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
						var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
						var speed = res.speed; // 速度，以米/每秒计
						var accuracy = res.accuracy; // 位置精度
						getAddress([longitude, latitude], (ress) => {
							cb(ress)
						}, marker)
					}
				})
			});
			wxSDK.error((err)=>{
				errorCb && errorCb(err)
			});
		}).catch(err => {
			errorCb && errorCb(err)
		})
	},
	/**
	 * 调起微信扫一扫接口
	 * @param {Object} cb 成功回调
	 * @param {Object} errorCb 失败回调
	 */
	callScanQRCode(path, cb = ()=>{}, errorCb = ()=>{}) {
		this.getWxConfig(path).then(boo => {
			wxSDK.ready(()=>{
				console.log('---config注入成功---，开始使用sdk接口')
				wxSDK.scanQRCode({
					needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
					scanType: ["qrCode"], // 可以指定扫二维码还是一维码，默认二者都有
					success: function (res) {
						var result = res.resultStr; // 当needResult 为 1 时，扫码返回的结果
						cb()
					},
				})
			});
			wxSDK.error((res)=>{
				uni.showToast({
				  title: '授权地址：' + JSON.stringify(res.realAuthUrl) + ';;入参地址：' + boo.testUrl,
				  icon: 'none',
				  duration: 3000
				})
			});
		})
	},
	/**
	 * 调起微信内置地图
	 * @param {Object} cb 成功回调
	 * @param {Object} errorCb 失败回调
	 */
	callOpenLocation(emitLocation) {
		this.getWxConfig().then(boo => {
			wxSDK.ready(()=>{
				wxSDK.openLocation({
					latitude: emitLocation.latitude, // 纬度，浮点数，范围为90 ~ -90
					longitude: emitLocation.longitude, // 经度，浮点数，范围为180 ~ -180。
					name: emitLocation.name, // 位置名
					address: emitLocation.address, // 地址详情说明
					scale: 1, // 地图缩放级别,整型值,范围从1~28。默认为最大
					infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
				})
			});
			wxSDK.error((res)=>{				
				console.log('---注入失败，查看失败原因---',res)
			});
		})
	},
	
	/**
	 * 调起微信扫一扫接口
	 * @param {Object} cb 成功回调
	 * @param {Object} errorCb 失败回调
	 */
	callDownloadImage(url, errorCb = ()=>{}) {
		this.getWxConfig().then(boo => {
			wxSDK.ready(()=>{
				console.log('---config注入成功---，开始使用sdk接口')
				wxSDK.downloadImage({
					serverId: url, // 需要下载的图片的服务器端ID，由uploadImage接口获得
					isShowProgressTips: 1, // 默认为1，显示进度提示
					success: function (res) {}
				})
			});
			wxSDK.error((res)=>{				
				console.log('---注入失败，查看失败原因---',res)
			});
		})
	},
	
	/**
	 * 调起微信扫一扫接口
	 * @param {Object} cb 成功回调
	 * @param {Object} errorCb 失败回调
	 */
	callWxPay(payData, successCb = () => {}, errorCb = ()=>{}) {
		wxSDK.config({
			debug: false, // 是否开启调试模式
			appId: payData.appId, // 必填，公众号的唯一标识
			timestamp: payData.timeStamp, // 必填，生成签名的时间戳
			nonceStr: payData.nonceStr, // 必填，生成签名的随机串
			signature: payData.paySign, // 必填，签名
			jsApiList: ['chooseWXPay']
		})
		wxSDK.ready(()=>{
			wxSDK.chooseWXPay({
				timestamp: payData["timeStamp"],
				nonceStr: payData["nonceStr"],
				package: payData["package"],
				signType: payData["signType"],
				paySign: payData["paySign"],
				success: res => {
					//  支付成功
					if(res.err_msg == "get_brand_wcpay_request:ok" ){
					  successCb(); // 支付成功回调
					}else if(res.err_msg == "get_brand_wcpay_request:cancel" ){
						errorCb('已取消支付')
					} else{
						errorCb('支付失败')
					} 
				},
				fail: res => {
					console.log(JSON.stringify(res));
				}
			});
		});
		wxSDK.error((res)=>{				
			console.log('---注入失败，查看失败原因---',res)
		});
	}
}
// #endif
